// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "gpu/gles2_conform_support/egl/config.h"

namespace egl {

Config::Config()
    : buffer_size_(0)
    , red_size_(0)
    , green_size_(0)
    , blue_size_(0)
    , luminance_size_(0)
    , alpha_size_(0)
    , alpha_mask_size_(0)
    , bind_to_texture_rgb_(EGL_FALSE)
    , bind_to_texture_rgba_(EGL_FALSE)
    , color_buffer_type_(EGL_RGB_BUFFER)
    , config_caveat_(EGL_NONE)
    , config_id_(EGL_DONT_CARE)
    , conformant_(EGL_OPENGL_ES2_BIT)
    , depth_size_(0)
    , level_(0)
    , max_pbuffer_width_(0)
    , max_pbuffer_height_(0)
    , max_pbuffer_pixels_(0)
    , min_swap_interval_(EGL_DONT_CARE)
    , max_swap_interval_(EGL_DONT_CARE)
    , native_renderable_(EGL_TRUE)
    , native_visual_id_(0)
    , native_visual_type_(EGL_DONT_CARE)
    , renderable_type_(EGL_OPENGL_ES2_BIT)
    , sample_buffers_(0)
    , samples_(0)
    , stencil_size_(0)
    , surface_type_(EGL_WINDOW_BIT)
    , transparent_type_(EGL_NONE)
    , transparent_red_value_(EGL_DONT_CARE)
    , transparent_green_value_(EGL_DONT_CARE)
    , transparent_blue_value_(EGL_DONT_CARE)
{
}

Config::~Config()
{
}

bool Config::GetAttrib(EGLint attribute, EGLint* value) const
{
    // TODO(alokp): Find out how to get correct values.
    switch (attribute) {
    case EGL_BUFFER_SIZE:
        *value = buffer_size_;
        break;
    case EGL_RED_SIZE:
        *value = red_size_;
        break;
    case EGL_GREEN_SIZE:
        *value = green_size_;
        break;
    case EGL_BLUE_SIZE:
        *value = blue_size_;
        break;
    case EGL_LUMINANCE_SIZE:
        *value = luminance_size_;
        break;
    case EGL_ALPHA_SIZE:
        *value = alpha_size_;
        break;
    case EGL_ALPHA_MASK_SIZE:
        *value = alpha_mask_size_;
        break;
    case EGL_BIND_TO_TEXTURE_RGB:
        *value = bind_to_texture_rgb_;
        break;
    case EGL_BIND_TO_TEXTURE_RGBA:
        *value = bind_to_texture_rgba_;
        break;
    case EGL_COLOR_BUFFER_TYPE:
        *value = color_buffer_type_;
        break;
    case EGL_CONFIG_CAVEAT:
        *value = config_caveat_;
        break;
    case EGL_CONFIG_ID:
        *value = config_id_;
        break;
    case EGL_CONFORMANT:
        *value = conformant_;
        break;
    case EGL_DEPTH_SIZE:
        *value = depth_size_;
        break;
    case EGL_LEVEL:
        *value = level_;
        break;
    case EGL_MAX_PBUFFER_WIDTH:
        *value = max_pbuffer_width_;
        break;
    case EGL_MAX_PBUFFER_HEIGHT:
        *value = max_pbuffer_height_;
        break;
    case EGL_MAX_PBUFFER_PIXELS:
        *value = max_pbuffer_pixels_;
        break;
    case EGL_MIN_SWAP_INTERVAL:
        *value = min_swap_interval_;
        break;
    case EGL_MAX_SWAP_INTERVAL:
        *value = max_swap_interval_;
        break;
    case EGL_NATIVE_RENDERABLE:
        *value = native_renderable_;
        break;
    case EGL_NATIVE_VISUAL_ID:
        *value = native_visual_id_;
        break;
    case EGL_NATIVE_VISUAL_TYPE:
        *value = native_visual_type_;
        break;
    case EGL_RENDERABLE_TYPE:
        *value = renderable_type_;
        break;
    case EGL_SAMPLE_BUFFERS:
        *value = sample_buffers_;
        break;
    case EGL_SAMPLES:
        *value = samples_;
        break;
    case EGL_STENCIL_SIZE:
        *value = stencil_size_;
        break;
    case EGL_SURFACE_TYPE:
        *value = surface_type_;
        break;
    case EGL_TRANSPARENT_TYPE:
        *value = transparent_type_;
        break;
    case EGL_TRANSPARENT_RED_VALUE:
        *value = transparent_red_value_;
        break;
    case EGL_TRANSPARENT_GREEN_VALUE:
        *value = transparent_green_value_;
        break;
    case EGL_TRANSPARENT_BLUE_VALUE:
        *value = transparent_blue_value_;
        break;
    default:
        return false;
    }
    return true;
}

} // namespace egl
